"""
1.编写程序，实现输入某商品的单价和数量，计算商品的总价并输出。
    参考答案：
    # 获取用户输入
    price = float(input('请输入商品价格：'))
    amount = int(input('请输入商品数量：'))
    # 计算总价
    total_price = price * amount
    # 输出结果
    print('商品总价为：', total_price)


2.编写函数，接收两个正整数作为参数，返回一个元组，其中第一个元素为最大公约数，第二个元素为最小公倍数。
    参考答案：
    def gcd_lcm(a, b):
        # 计算最大公约数
        x, y = a, b
        while y:
            x, y = y, x % y
        gcd = x
        # 计算最小公倍数
        lcm = a * b // gcd
        return gcd, lcm
    # 测试函数
    num1 = int(input('请输入第一个正整数：'))
    num2 = int(input('请输入第二个正整数：'))
    result = gcd_lcm(num1, num2)
    print(f'{num1}和{num2}的最大公约数是{result[0]}，最小公倍数是{result[1]}')


3.编写程序，实现输入体重和身高，输出身体质量指数BMI。
    参考答案：
    # 获取用户输入
    weight = float(input('请输入您的体重(kg)：'))
    height = float(input('请输入您的身高(m)：'))
    # 计算BMI
    BMI = weight / (height ** 2)
    # 输出结果
    print('您的BMI值为：', BMI)
    # 根据BMI给出健康建议
    if BMI < 18.5:
        print('体重过轻')
    elif 18.5 <= BMI < 24:
        print('体重正常')
    elif 24 <= BMI < 28:
        print('体重过重')
    else:
        print('肥胖')


4.设计一个学生类Student，包含学号、姓名和成绩属性，以及计算平均分的方法。
    参考答案：
    class Student:
        def __init__(self, student_id, name, scores):
            self.student_id = student_id
            self.name = name
            self.scores = scores  # scores是一个成绩列表
        def calculate_average(self):
            if len(self.scores) == 0:
                return 0
            return sum(self.scores) / len(self.scores)

        def display_info(self):
            avg_score = self.calculate_average()
            print(f'学号：{self.student_id}，姓名：{self.name}，平均分：{avg_score:.2f}')
    # 测试代码
    scores = [85, 90, 78, 92, 88]
    student1 = Student('2023001', '张三', scores)
    student1.display_info()


5.编写程序，输出所有的水仙花数（三位数，各位数字立方和等于该数本身）
    参考答案：
    print("所有的水仙花数：")
    count = 0
    for num in range(100, 1000):
        # 分解各位数字
        hundreds = num // 100
        tens = (num % 100) // 10
        units = num % 10
        # 判断是否为水仙花数
        if num == hundreds**3 + tens**3 + units**3:
            print(num, end=' ')
            count += 1
    print(f'\n共有{count}个水仙花数')


6.设计一个简单的银行账户类，包含存款、取款和查询余额的方法。
    参考答案：
    class BankAccount:
        def __init__(self, account_holder, initial_balance=0):
            self.account_holder = account_holder
            self.balance = initial_balance
        def deposit(self, amount):
            if amount > 0:
                self.balance += amount
                print(f"存款成功！当前余额：{self.balance}")
            else:
                print("存款金额必须大于0")
        def withdraw(self, amount):
            if amount > 0:
                if amount <= self.balance:
                    self.balance -= amount
                    print(f"取款成功！当前余额：{self.balance}")
                else:
                    print("余额不足")
            else:
                print("取款金额必须大于0")
        def check_balance(self):
            print(f"账户持有人：{self.account_holder}")
            print(f"当前余额：{self.balance}")
            return self.balance
    # 测试代码
    account = BankAccount("张三", 1000)
    account.check_balance()
    account.deposit(500)
    account.withdraw(200)
    account.withdraw(2000)  # 测试余额不足情况


7.编写程序，计算并输出斐波那契数列的前20项。
    参考答案：
    def fibonacci(n):
        fib_sequence = [0, 1]
        for i in range(2, n):
            next_num = fib_sequence[i-1] + fib_sequence[i-2]
            fib_sequence.append(next_num)
        return fib_sequence
    # 输出前20项斐波那契数列
    result = fibonacci(20)
    for i, num in enumerate(result):
        print(f"第{i+1}项: {num}")


8.编写一个简单的计算器程序，支持加、减、乘、除四则运算。
    参考答案：
    def calculator():
        print("简单计算器")
        print("支持的操作: +, -, *, /")
        try:
            num1 = float(input("请输入第一个数字: "))
            operator = input("请输入运算符: ")
            num2 = float(input("请输入第二个数字: "))
            if operator == '+':
                result = num1 + num2
            elif operator == '-':
                result = num1 - num2
            elif operator == '*':
                result = num1 * num2
            elif operator == '/':
                if num2 == 0:
                    print("错误: 除数不能为零!")
                    return
                result = num1 / num2
            else:
                print("错误: 不支持的运算符!")
                return
            print(f"结果: {num1} {operator} {num2} = {result}")
        except ValueError:
            print("错误: 请输入有效的数字!")
    # 运行计算器
    calculator()


9.编写程序，统计一个字符串中每个字符出现的次数。
    参考答案：
    def count_characters(text):
        char_count = {}
        for char in text:
            if char in char_count:
                char_count[char] += 1
            else:
                char_count[char] = 1
        return char_count
    # 测试函数
    text = input("请输入一个字符串: ")
    result = count_characters(text)
    print("字符出现次数统计:")
    for char, count in result.items():
        print(f"'{char}': {count}次")


10.设计一个图书类Book，包含书名、作者、价格属性，以及显示图书信息的方法。
    参考答案：
    class Book:
        def __init__(self, title, author, price):
            self.title = title
            self.author = author
            self.price = price
        def display_info(self):
            print(f"书名: {self.title}")
            print(f"作者: {self.author}")
            print(f"价格: ￥{self.price:.2f}")
        def apply_discount(self, discount):
            if 0 <= discount <= 1:
                self.price *= (1 - discount)
                print(f"应用{discount*100}%折扣后，新价格为: ￥{self.price:.2f}")
            else:
                print("折扣率必须在0到1之间")
    # 测试代码
    book1 = Book("Python编程", "张三", 59.99)
    book1.display_info()
    book1.apply_discount(0.1)  # 10%折扣
"""
